package com.hxh.bank.branch.spider;

import com.hxh.bank.branch.exception.SpiderException;
import com.hxh.bank.branch.vo.BankBranchVO;

/**
 * @author huangxunhui
 * Date: Created in 2021/5/16 13:28
 * Utils: IntelliJ IDEA
 * Description: 支行信息爬虫
 */
public abstract class BankBranchSpider {

    /**
     * 下一个爬虫
     */
    private BankBranchSpider nextSpider;

    /**
     * 解析支行信息
     *
     * @param bankBranchCode 支行联行号
     * @return 支行信息
     */
    protected abstract BankBranchVO parse(String bankBranchCode);

    /**
     * 设置下一个爬虫
     *
     * @param nextSpider 下一个爬虫
     */
    public void setNextSpider(BankBranchSpider nextSpider) {
        this.nextSpider = nextSpider;
    }

    /**
     * 使用下一个爬虫
     * 根据爬取的结果进行判定是否使用下一个网站进行爬取
     * @param vo 支行信息
     * @return true 或者 false
     */
    protected abstract boolean useNextSpider(BankBranchVO vo);

    /**
     * 查询支行信息
     *
     * @param bankBranchCode 支行联行号
     * @return 支行信息
     */
    public BankBranchVO search(String bankBranchCode) {
        BankBranchVO vo = parse(bankBranchCode);
        while (useNextSpider(vo) && this.nextSpider != null) {
            vo = nextSpider.search(bankBranchCode);
        }
        if (vo == null) {
            throw new SpiderException("无法获取支行信息：" + bankBranchCode);
        }
        return vo;
    }

}
